package com.example.demo.mapper;

import com.example.demo.entity.Articleinfo;
import com.example.demo.entity.CheckArticleinfo;
import com.example.demo.entity.DelArticleinfo;
import com.example.demo.entity.HistoryNotiinfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface ArticleMapper {
    int getArtCountByUid(@Param("uid") Integer uid);


    //查询文章列表
    List<Articleinfo> getMyList(@Param("uid") Integer uid);

    //删除文章
    int del(@Param("id") Integer id, @Param("uid") Integer uid);

    //查询文章详情
    Articleinfo getDetail(@Param("id") Integer id);

    //增加文章的阅读量
    int incrRCount(@Param("id") Integer id);

    //添加文章
    int add(Articleinfo articleinfo);

    //修改文章
    int update(Articleinfo articleinfo);

    //获取文章列表
    List<Articleinfo> getListByPage(@Param("psize") Integer psize,
                                    @Param("offsize") Integer offsize);


    //获取文章总条数
    int getCount();


    //存草稿
    int addDraft(Articleinfo articleinfo);

    //显示草稿列表
    List<Articleinfo> getMyDraft(@Param("uid") Integer uid);

    //删除草稿
    int delDraft(@Param("id") Integer id,@Param("uid") Integer uid);

    //根据草稿id查询对应草稿
    Articleinfo getDraftById(@Param("id") Integer id);

    //修改文章
    int updateDraft(Articleinfo articleinfo);

    //显示草稿详情
    Articleinfo getDraftDetail(@Param("id") Integer id);

    //显示草稿左侧个人信息
    int getDraftCountByUid(@Param("uid") Integer uid);

    //根据aid在文章表里面找到对应的uid
    int getUidByAid(@Param("aid") Integer aid);


    //文章赞加一
    int updateGCount(@Param("id") Integer id);
    //文章踩加一
    int updateBCount(@Param("id") Integer id);

    //管理员删除文章
    int deleteById(@Param("id") Integer id);

    //根据文章id获取文章信息
    Articleinfo getArticleById(@Param("id") Integer id);

    //将删除的文章信息保存到delArticle表中
    int saveDelArticle(DelArticleinfo delArticleinfo);

    //获取某用户被删除的文章信息
    List<DelArticleinfo> getAllDelArticleByUid(int uid);


    //修改要删除的文章id为i
    int updateState(@Param("id") Integer id, @Param("state") int state);

    //删除当前用户的被管理员删除文章的通知信息
    int updateDelArticleState(@Param("uid") Integer uid);

    //删除单条被管理员删除文章的通知
    int deleteDelNotiByAid(@Param("aid") Integer aid);

    //获取历史通知
    List<HistoryNotiinfo> getHistoryNoti(@Param("uid") int uid);

    //获取所有待审核的文章
    List<Articleinfo> getAllCheckArticle();

    //向checkArticle表中插入审核文章的信息
    int insertCheckArticle(CheckArticleinfo checkArticleinfo);

    //获取CheckArticle表中本当前用户的所有通知
    List<CheckArticleinfo> getAllCheckArticleInCheckArticle(@Param("uid") Integer uid);

    //将checkarticle表中的aid数据的state改为3
    int updateCheckeNotiByAid(@Param("aid") Integer aid,@Param("state") Integer state);

    //将删除的通知存入historynoti表中
    int insertHistoryToHistoryNoti(HistoryNotiinfo historyNotiinfo);

    //根据aid获取此条记录的时间
    LocalDateTime getDelTimeArticleByAid(@Param("aid") Integer aid);

    //根据aid在checkarticle中获取时间
    LocalDateTime getDelTimeInCheckArticleByAid(@Param("aid") Integer aid);

    //将checkarticle中的state为1 2的数据的state统一加2
    int updateAllCheckArticleStateAddTwo(@Param("uid") Integer uid);
}
